/**
 * @brief   Defines the `ZydisISAExt` datatype.
 */
typedef ZydisU8 ZydisISAExt;

/**
 * @brief   Values that represent `ZydisISAExt` elements.
 */
enum ZydisISAExts
{
    ZYDIS_ISA_EXT_INVALID,
    ZYDIS_ISA_EXT_ADOX_ADCX,
    ZYDIS_ISA_EXT_AES,
    ZYDIS_ISA_EXT_AMD,
    ZYDIS_ISA_EXT_AMD3DNOW,
    ZYDIS_ISA_EXT_AVX,
    ZYDIS_ISA_EXT_AVX2,
    ZYDIS_ISA_EXT_AVX2GATHER,
    ZYDIS_ISA_EXT_AVX512BW_128,
    ZYDIS_ISA_EXT_AVX512BW_128N,
    ZYDIS_ISA_EXT_AVX512BW_256,
    ZYDIS_ISA_EXT_AVX512BW_512,
    ZYDIS_ISA_EXT_AVX512BW_KOP,
    ZYDIS_ISA_EXT_AVX512CD_128,
    ZYDIS_ISA_EXT_AVX512CD_256,
    ZYDIS_ISA_EXT_AVX512CD_512,
    ZYDIS_ISA_EXT_AVX512DQ_128,
    ZYDIS_ISA_EXT_AVX512DQ_128N,
    ZYDIS_ISA_EXT_AVX512DQ_256,
    ZYDIS_ISA_EXT_AVX512DQ_512,
    ZYDIS_ISA_EXT_AVX512DQ_KOP,
    ZYDIS_ISA_EXT_AVX512DQ_SCALAR,
    ZYDIS_ISA_EXT_AVX512ER_512,
    ZYDIS_ISA_EXT_AVX512ER_SCALAR,
    ZYDIS_ISA_EXT_AVX512F_128,
    ZYDIS_ISA_EXT_AVX512F_128N,
    ZYDIS_ISA_EXT_AVX512F_256,
    ZYDIS_ISA_EXT_AVX512F_512,
    ZYDIS_ISA_EXT_AVX512F_KOP,
    ZYDIS_ISA_EXT_AVX512F_SCALAR,
    ZYDIS_ISA_EXT_AVX512PF_512,
    ZYDIS_ISA_EXT_AVX512_4FMAPS_512,
    ZYDIS_ISA_EXT_AVX512_4FMAPS_SCALAR,
    ZYDIS_ISA_EXT_AVX512_4VNNIW_512,
    ZYDIS_ISA_EXT_AVX512_BITALG_128,
    ZYDIS_ISA_EXT_AVX512_BITALG_256,
    ZYDIS_ISA_EXT_AVX512_BITALG_512,
    ZYDIS_ISA_EXT_AVX512_GFNI_128,
    ZYDIS_ISA_EXT_AVX512_GFNI_256,
    ZYDIS_ISA_EXT_AVX512_GFNI_512,
    ZYDIS_ISA_EXT_AVX512_IFMA_128,
    ZYDIS_ISA_EXT_AVX512_IFMA_256,
    ZYDIS_ISA_EXT_AVX512_IFMA_512,
    ZYDIS_ISA_EXT_AVX512_VAES_128,
    ZYDIS_ISA_EXT_AVX512_VAES_256,
    ZYDIS_ISA_EXT_AVX512_VAES_512,
    ZYDIS_ISA_EXT_AVX512_VBMI2_128,
    ZYDIS_ISA_EXT_AVX512_VBMI2_256,
    ZYDIS_ISA_EXT_AVX512_VBMI2_512,
    ZYDIS_ISA_EXT_AVX512_VBMI_128,
    ZYDIS_ISA_EXT_AVX512_VBMI_256,
    ZYDIS_ISA_EXT_AVX512_VBMI_512,
    ZYDIS_ISA_EXT_AVX512_VNNI_128,
    ZYDIS_ISA_EXT_AVX512_VNNI_256,
    ZYDIS_ISA_EXT_AVX512_VNNI_512,
    ZYDIS_ISA_EXT_AVX512_VPCLMULQDQ_128,
    ZYDIS_ISA_EXT_AVX512_VPCLMULQDQ_256,
    ZYDIS_ISA_EXT_AVX512_VPCLMULQDQ_512,
    ZYDIS_ISA_EXT_AVX512_VPOPCNTDQ_128,
    ZYDIS_ISA_EXT_AVX512_VPOPCNTDQ_256,
    ZYDIS_ISA_EXT_AVX512_VPOPCNTDQ_512,
    ZYDIS_ISA_EXT_AVXAES,
    ZYDIS_ISA_EXT_AVX_GFNI,
    ZYDIS_ISA_EXT_BMI1,
    ZYDIS_ISA_EXT_BMI2,
    ZYDIS_ISA_EXT_CET,
    ZYDIS_ISA_EXT_CLFLUSHOPT,
    ZYDIS_ISA_EXT_CLFSH,
    ZYDIS_ISA_EXT_CLWB,
    ZYDIS_ISA_EXT_CLZERO,
    ZYDIS_ISA_EXT_CMOV,
    ZYDIS_ISA_EXT_CMPXCHG16B,
    ZYDIS_ISA_EXT_F16C,
    ZYDIS_ISA_EXT_FAT_NOP,
    ZYDIS_ISA_EXT_FCMOV,
    ZYDIS_ISA_EXT_FMA,
    ZYDIS_ISA_EXT_FMA4,
    ZYDIS_ISA_EXT_FXSAVE,
    ZYDIS_ISA_EXT_FXSAVE64,
    ZYDIS_ISA_EXT_GFNI,
    ZYDIS_ISA_EXT_I186,
    ZYDIS_ISA_EXT_I286PROTECTED,
    ZYDIS_ISA_EXT_I286REAL,
    ZYDIS_ISA_EXT_I386,
    ZYDIS_ISA_EXT_I486,
    ZYDIS_ISA_EXT_I486REAL,
    ZYDIS_ISA_EXT_I86,
    ZYDIS_ISA_EXT_INVPCID,
    ZYDIS_ISA_EXT_KNCE,
    ZYDIS_ISA_EXT_KNCJKBR,
    ZYDIS_ISA_EXT_KNCSTREAM,
    ZYDIS_ISA_EXT_KNCV,
    ZYDIS_ISA_EXT_KNC_MISC,
    ZYDIS_ISA_EXT_KNC_PF_HINT,
    ZYDIS_ISA_EXT_LAHF,
    ZYDIS_ISA_EXT_LONGMODE,
    ZYDIS_ISA_EXT_LZCNT,
    ZYDIS_ISA_EXT_MONITOR,
    ZYDIS_ISA_EXT_MONITORX,
    ZYDIS_ISA_EXT_MOVBE,
    ZYDIS_ISA_EXT_MPX,
    ZYDIS_ISA_EXT_PAUSE,
    ZYDIS_ISA_EXT_PCLMULQDQ,
    ZYDIS_ISA_EXT_PCONFIG,
    ZYDIS_ISA_EXT_PENTIUMMMX,
    ZYDIS_ISA_EXT_PENTIUMREAL,
    ZYDIS_ISA_EXT_PKU,
    ZYDIS_ISA_EXT_POPCNT,
    ZYDIS_ISA_EXT_PPRO,
    ZYDIS_ISA_EXT_PREFETCHWT1,
    ZYDIS_ISA_EXT_PREFETCH_NOP,
    ZYDIS_ISA_EXT_PT,
    ZYDIS_ISA_EXT_RDPID,
    ZYDIS_ISA_EXT_RDPMC,
    ZYDIS_ISA_EXT_RDRAND,
    ZYDIS_ISA_EXT_RDSEED,
    ZYDIS_ISA_EXT_RDTSCP,
    ZYDIS_ISA_EXT_RDWRFSGS,
    ZYDIS_ISA_EXT_RTM,
    ZYDIS_ISA_EXT_SGX,
    ZYDIS_ISA_EXT_SGX_ENCLV,
    ZYDIS_ISA_EXT_SHA,
    ZYDIS_ISA_EXT_SMAP,
    ZYDIS_ISA_EXT_SMX,
    ZYDIS_ISA_EXT_SSE,
    ZYDIS_ISA_EXT_SSE2,
    ZYDIS_ISA_EXT_SSE2MMX,
    ZYDIS_ISA_EXT_SSE3,
    ZYDIS_ISA_EXT_SSE3X87,
    ZYDIS_ISA_EXT_SSE4,
    ZYDIS_ISA_EXT_SSE42,
    ZYDIS_ISA_EXT_SSE4A,
    ZYDIS_ISA_EXT_SSEMXCSR,
    ZYDIS_ISA_EXT_SSE_PREFETCH,
    ZYDIS_ISA_EXT_SSSE3,
    ZYDIS_ISA_EXT_SSSE3MMX,
    ZYDIS_ISA_EXT_SVM,
    ZYDIS_ISA_EXT_TBM,
    ZYDIS_ISA_EXT_VAES,
    ZYDIS_ISA_EXT_VMFUNC,
    ZYDIS_ISA_EXT_VPCLMULQDQ,
    ZYDIS_ISA_EXT_VTX,
    ZYDIS_ISA_EXT_X87,
    ZYDIS_ISA_EXT_XOP,
    ZYDIS_ISA_EXT_XSAVE,
    ZYDIS_ISA_EXT_XSAVEC,
    ZYDIS_ISA_EXT_XSAVEOPT,
    ZYDIS_ISA_EXT_XSAVES,

    /**
     * @brief   Maximum value of this enum.
     */
    ZYDIS_ISA_EXT_MAX_VALUE = ZYDIS_ISA_EXT_XSAVES,
    /**
     * @brief   Minimum amount of bits required to store a value of this enum.
     */
    ZYDIS_ISA_EXT_MIN_BITS  = 0x0008
};
